package com.itheima.demo;

public class Test06 {
    public static void main(String[] args) {
        /*
            需求：
            某系统的数字密码(大于8)。比如1983，采用加密方式进行传输规则如下:
            每位数加上5
            再对10求余，
            最后将所有数字反转，
            得到一串新数
         */

        // 1.把数字转成数组
        // int[] arr = {1, 9, 8, 3};
        int[] arr = intToArray(1983);


        // 2.每一位加上5
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
        }
        // 结果 ：6 14 13 8
        // 3.再对10求余
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] % 10;
        }
        // 结果：6 4 3 8
        /*
        4.将所有数字反转
            定义两个指针，i 开始,j 结束,i指针++ j 指针--
         */
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        // 5.得到一串新数
        int number = 0;
        for (int i = 0; i < arr.length; i++) {
            number = number * 10 + arr[i];
        }
        System.out.print(number);
    }

    public static int[] intToArray(int number) {
        // 思路：反向推导

        // 4.开始仅知道是一个大于0的整数，需要求出有多少位
        int temp = number;// 记录原始数据，后面用于获取每一个数字
        int length = 0;// 记录数组长度
        // 只知道结束条件时，使用while
        while (number != 0) {
            number = number / 10;
            length++;
        }

        // 3.定义一个数组，定义数组需要知道长度，只能通过整数获取长度
        int[] arr = new int[length];

        // 2.把整数的每一个数存到数组中，需要先从整数中获取每一个数
        // 定义索引，并初始化为数组的长度-1 ,因为是从整数的个位开始取值的
        int index = arr.length - 1;
        while (temp != 0) {
            int ge = temp % 10;// 获取个位上的数字
            temp = temp / 10;// 每次把原始整数去掉一位
            // 把数据存到arr中
            arr[index] = ge;
            index--;
        }
        // 1.需要得出如： [1,2,3,4,5] 的数组
       /* for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }*/

        return arr;
    }

}
